#ifndef MESSAGE_HANDLE_H
#define MESSAGE_HANDLE_H

#include <stdbool.h>
#include <stdint.h>

struct cJSON;

/* 消息类型 */
enum CM_TYPE
{
    CM_CONNECT = 0,
    CM_NORMAL = 1,
    CM_P2P = 2,
    CM_ACK = 100
};

#ifdef __cplusplus
extern "C" {
#endif

/* 工厂函数：返回 malloc 的字符串，调用者 free */
char *cm_make_connect(const char *nick);
char *cm_make_normal(const char *text);
char *cm_make_p2p(const char *text, const char *to_uuid);
char *cm_make_ack(const char *uuid);

/* 通用构造：payload_json 必须是 JSON 对象字符串 */
char *cm_make(enum CM_TYPE type, const char *uuid, const char *payload_json);

/* 解析：返回 cJSON *，调用者 cJSON_Delete */
struct cJSON *cm_parse(const char *line);

/* 只读访问 */
enum CM_TYPE cm_type(const struct cJSON *msg);
const char *cm_uuid(const struct cJSON *msg);
const struct cJSON *cm_payload(const struct cJSON *msg);

/* 生成 UUID（无括号，36 字符 + '\0'） */
void cm_new_uuid(char out[37]);

#ifdef __cplusplus
}
#endif

#endif